package org.android.pasos;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.widget.RemoteViews;

public class Widget extends AppWidgetProvider {
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {

		// Iteramos la lista de widgets en ejecuci�n
		for (int i = 0; i < appWidgetIds.length; i++) {
			// ID del widget actual
			int widgetId = appWidgetIds[i];

			// Actualizamos el widget actual
			actualizarWidget(context, appWidgetManager, widgetId);
		}
	}

	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		// Accedemos a las preferencias de la aplicaci�n
		SharedPreferences prefs = context.getSharedPreferences("WidgetPrefs",
				Context.MODE_PRIVATE);
		SharedPreferences.Editor editor = prefs.edit();

		// Eliminamos las preferencias de los widgets borrados
		for (int i = 0; i < appWidgetIds.length; i++) {
			// ID del widget actual
			int widgetId = appWidgetIds[i];

			editor.remove("msg_" + widgetId);
		}

		// Aceptamos los cambios
		editor.commit();

		super.onDeleted(context, appWidgetIds);
	}

	@Override
	public void onReceive(Context context, Intent intent) {

		if (intent.getAction().equals("ACTUALIZAR_WIDGET")) {
			int widgetId = intent.getIntExtra(
					AppWidgetManager.EXTRA_APPWIDGET_ID,
					AppWidgetManager.INVALID_APPWIDGET_ID);

			// Obtenemos el widget manager de nuestro contexto
			AppWidgetManager widgetManager = AppWidgetManager
					.getInstance(context);

			// Actualizamos el widget
			if (widgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
				actualizarWidget(context, widgetManager, widgetId);
			}
		}

		super.onReceive(context, intent);
	}

	public static void actualizarWidget(Context context,
			AppWidgetManager appWidgetManager, int widgetId) {

		// Obtenemos la lista de controles del widget actual
		RemoteViews controles = new RemoteViews(context.getPackageName(),
				R.layout.widget);

		// Asociamos los 'eventos' al widget
		Intent intent = new Intent(Constants.INTENT_MENU_EMERGENCY);
		intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);

		PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
				intent, 0);

		controles.setOnClickPendingIntent(R.id.BtnActualizar, pendingIntent);
		appWidgetManager.updateAppWidget(widgetId, controles);
	}
}
